package br.usjt.mazerobot.pc.util;

import br.usjt.mazerobot.commons.comunicacao.Encoder;
import br.usjt.mazerobot.commons.comunicacao.Pacote;
import br.usjt.mazerobot.commons.constante.IdentificadorPacote;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
import java.util.logging.Level;

public class Logger {

    private static boolean logRemoto;
    private static boolean logLocal;
    private SimpleDateFormat formato = new SimpleDateFormat("hh:mm:ss.SSS");
    private StringBuilder mensagemLogRemoto;

    public Logger() {
        try {
            Properties loadProperties = PropertiesUtil.loadProperties("Configuracao.properties");
            logLocal = Boolean.parseBoolean(loadProperties.getProperty("log_local"));
            logRemoto = Boolean.parseBoolean(loadProperties.getProperty("log_remoto"));
            mensagemLogRemoto = new StringBuilder();

        } catch (IOException ex) {
            java.util.logging.Logger.getLogger(Logger.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void imprime(String msg) {
        if (logLocal) {
            System.out.println("[DEBUG: " + formato.format(new Date()) + "] " + msg);
        }
    }

    public void erro(String msg) {
        if (logLocal) {
            System.err.println("[ERRO: " + formato.format(new Date()) + "] " + msg);
        }
    }

    public String exibeLogRemoto(Pacote pacote) {

        String linhalog = "";

        if (logRemoto) {
            Encoder encoder = new Encoder();
            mensagemLogRemoto.append(encoder.decodificaLog(pacote));
            if (pacote.getRodape() == IdentificadorPacote.FIM_SEQUENCIA_DE_PACOTES.getCodigo()) {
                linhalog = String.format("[=== ROBO === %s] %s", formato.format(new Date()), mensagemLogRemoto);
                System.out.println(linhalog);
                mensagemLogRemoto = new StringBuilder();
            }
        }
        return linhalog;
    }
}
